package engineering;
import java.util.TreeMap;
import java.util.TreeSet;
import java.util.Scanner;

public class Analyse{
  public static void main(String[] args){
    Scanner eingabe=new Scanner(System.in);
    TreeMap<String,StringCounter> map=new TreeMap<String, StringCounter>();
    String s;
    while((s=eingabe.next())!=null){
      String[] words=s.split("[\\p{Space}\\p{Punct}]");
      //mehrere Elemente in eckigen Klammern aufgelistet
      //Ersteres steht f�r Whitespace, letzteres f�r alle Satzzeichen
      for(int i=0; i<words.length; ++i){
        s=words[i].toLowerCase();
        if(map.containsKey(s)) map.get(s).addCount(1);
        else map.put(s, new StringCounter(s));
      }
    }
    /*Collection<StringCounter> anzstr=map.values();
    //alphabetisch sortierte Liste
    for(Iterator<StringCounter> i=anzstr.iterator(); i.hasNext(); ){
      StringCounter sc=i.next();
      System.out.println(sc.getCount()+"\t* "+sc.getString());
    }*/
    //sortiert nach Anzahl der Wörter
    TreeSet<StringCounter> ts=new TreeSet<StringCounter>(map.values());
    /*for(Iterator<StringCounter> i=ts.iterator(); i.hasNext(); ){
      StringCounter sc=i.next();
      System.out.println(sc.getCount()+"\t* "+sc.getString());
    }*/
    System.out.println(ts);
  }
}
